//某个充电站可以提供n个设备，每个设备均有对应的输出功率。
//任意个充电设备组合的输出功率总和，均构成功率集合P的一个元素。功率集合P的最优元素，表示最接近充电站最大输出功率p_max的元素。
function closestPower(n, arr, max) {
    let powerSet = new Set([0]); // 存储所有可能的功率组合
    for (let power of arr) {
        let newSet = new Set(powerSet); // 复制当前集合
        for (let existingPower of powerSet) {
            let newPower = existingPower + power;
            newSet.add(newPower);
        }
        powerSet = newSet;
    }

    // 找到最接近 max 的功率
    let closest = 0;
    for (let power of powerSet) {
        if (power <= max && power > closest) {
            closest = power;
        }
    }

    return closest;
}

// 示例测试
console.log(closestPower(3, [10, 20, 30], 35)); // 输出 30
console.log(closestPower(4, [5, 7, 12, 20], 19)); // 输出 19
console.log(closestPower(5, [3, 8, 15, 17, 25], 40)); // 输出 40
